using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PacManMovement : MonoBehaviour
{
    public float moveSpeed = 5f; // 移动速度
    private Vector3 direction; // 当前移动方向
    private Vector3 nextDirection; // 下一个要转向的方向（缓冲输入）
    private Rigidbody rb;
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        direction = Vector3.right; // 初始方向向右
    }

    // Update is called once per frame
    void Update()
    {
        // 接收玩家输入（优先处理方向键）
        if (Input.GetKeyDown(KeyCode.UpArrow)) nextDirection = Vector3.forward;
        if (Input.GetKeyDown(KeyCode.DownArrow)) nextDirection = Vector3.back;
        if (Input.GetKeyDown(KeyCode.LeftArrow)) nextDirection = Vector3.left;
        if (Input.GetKeyDown(KeyCode.RightArrow)) nextDirection = Vector3.right;

        // 尝试转向（如果前方没有墙，则切换方向）
        if (CanMove(nextDirection)) {
            direction = nextDirection;
            // 旋转吃豆人朝向移动方向
            transform.rotation = Quaternion.LookRotation(direction);
        }
    }
    void FixedUpdate() {
        // 按当前方向移动
        rb.velocity = direction * moveSpeed;
    }
    // 检测该方向是否可以移动（前方是否有墙）
    private bool CanMove(Vector3 dir) {
        // 从当前位置向前发射一条短射线，检测是否碰撞到墙壁（标签为"Wall"）
        RaycastHit hit;
        if (Physics.Raycast(transform.position, dir, out hit, 0.6f)) {
            return !hit.collider.CompareTag("Wall"); // 没撞到墙则可以移动
        }
        return true;
    }
}
